#!/bin/bash

# 104协议配置脚本
# 用于配置IEC 60870-5-104协议的相关参数

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 显示104协议配置界面
show_104_config() {
    echo "=========================================="
    echo "      IEC 60870-5-104 协议配置"
    echo "=========================================="
    echo
    echo "现在需要配置 104 协议的关键参数。"
    echo "其他协议参数将使用预设的默认值。"
    echo
    
    # 网络连接配置
    echo "🌐 网络连接配置"
    echo "----------------"
    echo "请设置 104 协议服务器的连接信息："
    echo
    
    # 服务器IP配置
    echo "1. 服务器IP地址"
    echo "   104协议服务器的IP地址"
    read -p "   服务器IP地址 [默认: 192.168.1.100]: " custom_server_ip
    custom_server_ip=${custom_server_ip:-192.168.1.100}
    echo "   ✓ 服务器IP地址设置为: $custom_server_ip"
    echo
    
    # 服务器端口配置
    echo "2. 服务器端口"
    echo "   104协议标准端口为2404"
    read -p "   服务器端口 [默认: 2404]: " custom_server_port
    custom_server_port=${custom_server_port:-2404}
    echo "   ✓ 服务器端口设置为: $custom_server_port"
    echo
    
    # 日志级别配置
    echo "📝 日志级别配置"
    echo "----------------"
    echo "请选择日志输出级别："
    echo "  [1] ERROR - 只显示错误信息（生产环境推荐）"
    echo "  [2] WARN  - 显示警告和错误信息"
    echo "  [3] INFO  - 显示重要信息（默认推荐）"
    echo "  [4] DEBUG - 显示详细调试信息（开发环境推荐）"
    echo
    
    while true; do
        read -p "请选择日志级别 [1-4, 默认: 3]: " log_choice
        log_choice=${log_choice:-3}
        case $log_choice in
            1) 
                custom_log_level=1
                level_name="ERROR"
                echo "✓ 日志级别设置为: ERROR"
                break 
                ;;
            2) 
                custom_log_level=2
                level_name="WARN"
                echo "✓ 日志级别设置为: WARN"
                break 
                ;;
            3) 
                custom_log_level=3
                level_name="INFO"
                echo "✓ 日志级别设置为: INFO"
                break 
                ;;
            4) 
                custom_log_level=4
                level_name="DEBUG"
                echo "✓ 日志级别设置为: DEBUG"
                break 
                ;;
            *) 
                echo "❌ 无效选择，请输入1-4" 
                ;;
        esac
    done
    echo
    
    # 设置其他参数为默认值
    NETWORK_CUSTOM="true"
    LOGGING_CUSTOM="true"
    PROTOCOL_CUSTOM="false"
    
    # 设置默认的网络参数
    custom_timeout=5000
    custom_buffer_size=4096
    custom_auto_reconnect="y"
    
    # 设置默认的日志参数
    custom_console_output="y"
    custom_file_output="y"
    custom_log_file="./output/logs/app.log"
}

# 生成104协议配置
generate_104_config() {
    local config_file="$1"
    
    log_info "生成104协议配置到: $config_file"
    
    # 创建配置文件
    cat > "$config_file" << EOF
# 104协议配置
# 由104协议配置脚本自动生成
# 生成时间: $(date '+%Y-%m-%d %H:%M:%S')
# 
# 此文件包含104协议的所有配置信息

# ==================== 协议配置 ====================
# 104协议配置（使用预设默认值）
# 协议控制机制使用协议标准规定的宏定义，无需配置

# ==================== 网络配置 ====================
# 网络配置（用户自定义）
server_ip=$custom_server_ip
server_port=$custom_server_port
timeout_ms=$custom_timeout
buffer_size=$custom_buffer_size
auto_reconnect=$custom_auto_reconnect
reconnect_interval=10
max_reconnect_count=5

# ==================== 日志配置 ====================
# 日志配置由构建版本统一管理，此处不再配置

# ==================== 项目信息 ====================
PROTOCOL=104
PROTOCOL_TYPE="104"
PROTOCOL_DESCRIPTION="IEC 60870-5-104 Protocol Implementation"
EOF
    
    echo
    log_info "104协议配置生成完成: $config_file"
    echo "配置摘要:"
    echo "  服务器地址: $custom_server_ip:$custom_server_port"
    echo "  日志级别: $level_name"
    echo
}

# 主函数
main() {
    # 检查参数
    if [ $# -eq 0 ]; then
        log_error "用法: $0 <config_file>"
        log_error "示例: $0 /path/to/project.conf"
        exit 1
    fi
    
    local config_file="$1"
    
    # 显示配置界面
    show_104_config
    
    # 生成配置文件
    generate_104_config "$config_file"
}

# 生成项目配置文件中的协议相关配置
generate_project_config() {
    local config_file="$1"
    
    log_info "生成104协议配置到项目配置文件..."
    
    # 检查是否存在104协议配置文件
    if [ -f "protocol_104.conf" ]; then
        # 从104协议配置文件中提取协议相关配置
        log_info "从protocol_104.conf加载协议配置"
        
        # 协议配置
        cat >> "$config_file" << EOF

# ==================== 协议配置 ====================
EOF
        # 从104协议配置文件读取104特有配置
        if [ -f "config/protocol_104.conf" ]; then
            # 104协议特有的网络连接配置
            grep "^server_ip\|^server_port" config/protocol_104.conf >> "$config_file"
            
            # 添加网络配置段
            cat >> "$config_file" << EOF

# ==================== 网络配置 ====================
EOF
            # 从104协议配置文件读取网络配置
            grep "^timeout_ms\|^buffer_size\|^auto_reconnect\|^reconnect_interval\|^max_reconnect_count" config/protocol_104.conf >> "$config_file"
        else
            # 如果配置文件不存在，使用默认值
            cat >> "$config_file" << EOF
# 104协议特有的网络连接配置（使用默认值）
server_ip=192.168.1.100
server_port=2404

# ==================== 网络配置 ====================
timeout_ms=5000
buffer_size=4096
auto_reconnect=y
reconnect_interval=10
max_reconnect_count=5
EOF
        fi
        
        # 日志配置由构建版本统一管理，此处不再生成
        
    else
        # 如果104协议配置不存在，从配置文件读取默认值
        log_info "使用104协议配置文件中的默认配置"
        
        if [ -f "config/protocol_104.conf" ]; then
            # 从配置文件读取所有配置
            cat >> "$config_file" << EOF

# ==================== 协议配置 ====================
EOF
            # 104协议特有的网络连接配置
            grep "^server_ip\|^server_port" config/protocol_104.conf >> "$config_file"
            
            # 通用网络配置
            cat >> "$config_file" << EOF

# ==================== 网络配置 ====================
EOF
            grep "^timeout_ms\|^buffer_size\|^auto_reconnect\|^reconnect_interval\|^max_reconnect_count" config/protocol_104.conf >> "$config_file"
            
            # 日志配置
            cat >> "$config_file" << EOF

# ==================== 日志配置 ====================
EOF
            grep "^log_path\|^log_level\|^max_file_size" config/protocol_104.conf >> "$config_file"
        else
            # 如果配置文件不存在，使用硬编码的默认值
            cat >> "$config_file" << EOF

# ==================== 协议配置 ====================
# 104协议特有的网络连接配置
server_ip=192.168.1.100
server_port=2404

# ==================== 网络配置 ====================
# 通用网络配置
timeout_ms=5000
buffer_size=4096
auto_reconnect=y
reconnect_interval=10
max_reconnect_count=5

# ==================== 日志配置 ====================
# 日志配置（使用默认值）
log_path=./output/logs
log_level=3
max_file_size=5242880
EOF
        fi
    fi
    
    log_info "104协议配置生成完成"
}

# 如果直接执行此脚本
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
    main "$@"
fi
